-
Notifications
You must be signed in to change notification settings - Fork 233
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improve context detection for infix operators #1756
Conversation
(* FIXME: this is britle, but lids don't have precise enough location | ||
information to handle these cases correctly. *) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it is brittle
. But in fact, is that really brittle?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Well, the whole thing is a bit dodgy. Merlin reconstructs a string, that it then parses again, to try to guess on what component the cursor here since longident don't have precise enough location information. Mixed with weird things like ident that require parenthesis or others that require parenthesis plus spaces, it makes the whole process very hacky.
Hopefully having better location information in longidents will allow us to replace all of this soon :-)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Make sense. Thanks for the explanation!
3024444
to
b551ab2
Compare
It's always correct to have a space after the parenthesis and it is sometimes necessary, for infix operators that start with `*` for example.
b551ab2
to
9f8cbf4
Compare
Improve context detection for infix operators
CHANGES: Fri May 17 19:59:42 CET 2024 + merlin binary - Support for OCaml 5.2 (ocaml/merlin#1757) - destruct: Removal of residual patterns (ocaml/merlin#1737, fixes ocaml/merlin#1560) - Do not erase fields' names when destructing punned record fields (ocaml/merlin#1734, fixes ocaml/merlin#1661) - Ignore SIGPIPE in the Merlin server process (ocaml/merlin#1746) - Fix lexing of quoted strings in comments (ocaml/merlin#1754, fixes ocaml/merlin#1753) - Improve cursor position detection in longidents (ocaml/merlin#1756) - Addition of a `merlin-lib.commands` library which disassociates the execution of commands from the `new_protocol`, from the binary, allowing it to be invoked from other projects (ocaml/merlin#1758) - New occurrences backend: Don't index occurrences when `merlin.hide` attribute is present. (ocaml/merlin#1768) - Use the new `uid_to_decl` table in 5.2's cmt files to get documentation. (ocaml/merlin#1773)
CHANGES: May May 31 14:02:42 CET 2024 + merlin binary - destruct: Removal of residual patterns (ocaml/merlin#1737, fixes ocaml/merlin#1560) - Do not erase fields' names when destructing punned record fields (ocaml/merlin#1734, fixes ocaml/merlin#1661) - Ignore SIGPIPE in the Merlin server process (ocaml/merlin#1746) - Fix lexing of quoted strings in comments (ocaml/merlin#1754, fixes ocaml/merlin#1753) - Improve cursor position detection in longidents (ocaml/merlin#1756)
CHANGES: Fri May 31 14:02:42 CEST 2024 + merlin binary - destruct: Removal of residual patterns (ocaml/merlin#1737, fixes ocaml/merlin#1560) - Do not erase fields' names when destructing punned record fields (ocaml/merlin#1734, fixes ocaml/merlin#1661) - Ignore SIGPIPE in the Merlin server process (ocaml/merlin#1746) - Fix lexing of quoted strings in comments (ocaml/merlin#1754, fixes ocaml/merlin#1753) - Improve cursor position detection in longidents (ocaml/merlin#1756)
CHANGES: Fri May 31 14:02:42 CEST 2024 + merlin binary - destruct: Removal of residual patterns (ocaml/merlin#1737, fixes ocaml/merlin#1560) - Do not erase fields' names when destructing punned record fields (ocaml/merlin#1734, fixes ocaml/merlin#1661) - Ignore SIGPIPE in the Merlin server process (ocaml/merlin#1746) - Fix lexing of quoted strings in comments (ocaml/merlin#1754, fixes ocaml/merlin#1753) - Improve cursor position detection in longidents (ocaml/merlin#1756)
CHANGES: Fri May 31 14:02:42 CEST 2024 + merlin binary - destruct: Removal of residual patterns (ocaml/merlin#1737, fixes ocaml/merlin#1560) - Do not erase fields' names when destructing punned record fields (ocaml/merlin#1734, fixes ocaml/merlin#1661) - Ignore SIGPIPE in the Merlin server process (ocaml/merlin#1746) - Fix lexing of quoted strings in comments (ocaml/merlin#1754, fixes ocaml/merlin#1753) - Improve cursor position detection in longidents (ocaml/merlin#1756)
CHANGES: Fri May 31 14:02:42 CEST 2024 + merlin binary - destruct: Removal of residual patterns (ocaml/merlin#1737, fixes ocaml/merlin#1560) - Do not erase fields' names when destructing punned record fields (ocaml/merlin#1734, fixes ocaml/merlin#1661) - Ignore SIGPIPE in the Merlin server process (ocaml/merlin#1746) - Fix lexing of quoted strings in comments (ocaml/merlin#1754, fixes ocaml/merlin#1753) - Improve cursor position detection in longidents (ocaml/merlin#1756)
Context detection for longidents relies on some britle "where is the cursor in the lid" logic.
This PR add a special case to improve the handling of operators that requires parenthesis.
More precise locations in lid is required to actually get a clean and correct implementation, but at least this PR improves the situation a bit.